package br.ufrn.projetoDB.gerenciadorGaragem.persistencia.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.criterion.Criterion;

import br.ufrn.projetoDB.gerenciadorGaragem.dominio.Funcionario;
import br.ufrn.projetoDB.gerenciadorGaragem.dominio.Pessoa;
import br.ufrn.projetoDB.gerenciadorGaragem.dominio.TipoPermissao;
import br.ufrn.projetoDB.gerenciadorGaragem.persistencia.DAOGenericoHibernate;
import br.ufrn.projetoDB.gerenciadorGaragem.persistencia.util.ConnectionFactory;

public class FuncionarioDAO {
	private Connection c;
	public FuncionarioDAO() {
		c = new ConnectionFactory().getConnection();
	}
	
	public Funcionario autenticarFuncionario(String login, String senha) throws SQLException{
		PreparedStatement p = c.prepareStatement("SELECT f.id_funcionario,f.permissao,f.senha,f.login,p.id_pessoa,p.cpf,p.nome " +
							"FROM comum.funcionario f " +
							"INNER JOIN comum.pessoa p on f.id_pessoa=p.id_pessoa " +
						"WHERE f.login=? AND f.senha=?");
		p.setString(1, login);
		p.setString(2, senha);

		ResultSet rs = p.executeQuery();
		
		if (rs == null)
			return null;
		
		while (rs.next()) {
			Funcionario f = new Funcionario(rs.getInt("id_funcionario"));
			f.setPermissao(TipoPermissao.valueOf(rs.getString("permissao")));
			f.setSenha(rs.getString("senha"));
			f.setLogin(rs.getString("login"));
			f.setPessoa(new Pessoa(rs.getInt("id_pessoa")));
			f.getPessoa().setCpf(rs.getLong("cpf"));
			f.getPessoa().setNome(rs.getString("nome"));
			return f;

		}

		return null;
		
	}
	
	public Funcionario findById(Integer id) throws SQLException {
		PreparedStatement p = c.prepareStatement("SELECT f.id_funcionario,f.permissao,f.senha,f.login,p.id_pessoa,p.cpf,p.nome " +
				"FROM comum.funcionario f " +
				"INNER JOIN comum.pessoa p on f.id_pessoa=p.id_pessoa " +
			"WHERE f.id_funcionario=?");
		p.setInt(1, id);
		ResultSet rs = p.executeQuery();
		
		if (rs == null)
		return null;
		
		while (rs.next()) {
			Funcionario f = new Funcionario(rs.getInt("id_funcionario"));
			f.setPermissao(TipoPermissao.valueOf(rs.getString("permissao")));
			f.setSenha(rs.getString("senha"));
			f.setLogin(rs.getString("login"));
			f.setPessoa(new Pessoa(rs.getInt("id_pessoa")));
			f.getPessoa().setCpf(rs.getLong("cpf"));
			f.getPessoa().setNome(rs.getString("nome"));
			return f;
		
		}
		
		return null;
	}

}
